/**
 */
package fUML.Semantics.Actions.IntermediateActions;

import fUML.Semantics.Actions.BasicActions.ActionActivation;

import fUML.Semantics.Classes.Kernel.Link;

import fUML.Syntax.Actions.IntermediateActions.LinkEndData;

import fUML.Syntax.Classes.Kernel.Association;

import org.eclipse.emf.common.util.EList;

/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Link Action Activation</b></em>'.
 * <!-- end-user-doc -->
 *
 * <!-- begin-model-doc -->
 * A link action activation is an action activation for a link action.
 * <!-- end-model-doc -->
 *
 *
 * @see fUML.Semantics.Actions.IntermediateActions.IntermediateActionsPackage#getLinkActionActivation()
 * @model abstract="true"
 * @generated
 */
public interface LinkActionActivation extends ActionActivation {
	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * <!-- begin-model-doc -->
	 * // Test whether the given link matches the given end data.
	 *  
	 *                   boolean matches = true;
	 *  int i = 1;
	 *  while (matches & i
	 *                   <= endDataList.size()) {
	 *  matches = this.endMatchesEndData(link,
	 *                   endDataList.getValue(i-1));
	 *  i = i + 1;
	 *  }
	 *  
	 *                   return matches;
	 *  
	 * <!-- end-model-doc -->
	 * @model required="true" ordered="false" linkRequired="true" linkOrdered="false" endDataListMany="true" endDataListOrdered="false"
	 * @generated
	 */
	boolean linkMatchesEndData(Link link, EList<LinkEndData> endDataList);

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * <!-- begin-model-doc -->
	 * // Test whether the appropriate end of the given link matches the given end
	 *                   data.
	 *  
	 *  boolean matches = false;
	 *  if (endData.value ==
	 *                   null) {
	 *  matches = true;
	 *  } else {
	 *  Property end =
	 *                   endData.end;
	 *  FeatureValue linkFeatureValue =
	 *                   link.getFeatureValue(end);
	 *  Value endValue =
	 *                   this.getTokens(endData.value).getValue(0);
	 *  if (endData instanceof
	 *                   LinkEndDestructionData) {
	 *  if
	 *                   (!((LinkEndDestructionData)endData).isDestroyDuplicates &
	 *                   !end.multiplicityElement.isUnique & end.multiplicityElement.isOrdered)
	 *                   {
	 *  int destroyAt =
	 *                   ((UnlimitedNaturalValue)(this.getTokens(((LinkEndDestructionData)endData).destroyAt).getValue(0))).value.naturalValue;
	 *                   matches = linkFeatureValue.values.getValue(0).equals(endValue) &&
	 *                   linkFeatureValue.position == destroyAt;
	 *  } else {
	 *  matches =
	 *                   linkFeatureValue.values.getValue(0).equals(endValue);
	 *  }
	 *  } else
	 *                   {
	 *  matches =
	 *                   linkFeatureValue.values.getValue(0).equals(endValue);
	 *  }
	 *                   }
	 *  
	 *  return matches;
	 *  
	 * <!-- end-model-doc -->
	 * @model required="true" ordered="false" linkRequired="true" linkOrdered="false" endDataRequired="true" endDataOrdered="false"
	 * @generated
	 */
	boolean endMatchesEndData(Link link, LinkEndData endData);

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * <!-- begin-model-doc -->
	 * // Get the association for the link action of this activation.
	 *                   
	 *  return
	 *                   (Association)(((LinkAction)(this.node)).endData.getValue(0).end.association);
	 *                 
	 * <!-- end-model-doc -->
	 * @model kind="operation" required="true" ordered="false"
	 * @generated
	 */
	Association getAssociation();

} // LinkActionActivation
